package cn.tedu._04mybatis.mapper;

import cn.tedu._04mybatis.pojo.entity.Weibo;
import cn.tedu._04mybatis.pojo.vo.*;
import org.apache.ibatis.annotations.*;

import java.util.List;

@Mapper
public interface WeiboMapper {
    /**
     * 1.增：在微博表中插入1条数据:insertWeibo,并测试
     */
    //@Insert("INSERT INTO blog.weibo(id,content,created,user_id) VALUES (#{id},#{content},#{created},#{user_id})")
    int insertWeibo(Weibo weibo);

    /**
     * 2.删：根据微博ID删除指定的微博信息
     */
    //@Delete("DELETE FROM blog.weibo WHERE id=#{id}")
    int deleteWeibo(Long id);

    /**
     * 3.改：根据微博ID修改微博的信息
     */
    //@Update("UPDATE blog.weibo SET content = #{content},created = #{created},user_id = #{user_id} where id=#{id}")
    int updateById(Weibo weibo);

    /**
     * 4.查：单条数据-全列查询
     *   根据微博ID查询该条微博的信息[全列]
     *   注意：当查询字段名和JAVA类属性名不一致时,查询时使用别名方式解决.
     */
    //@Select("SELECT id, content, created, user_id as userId FROM blog.weibo WHERE id=#{id}")
    Weibo selectById(int id);

    /**
     * 5.查：多条数据-全列查询
     *   查询所有微博的信息[全列]
     */
    //@Select("SELECT id, content, created, user_id as userId FROM blog.weibo")
    List<Weibo> selectAll();

    /**
     * 6.查：单条数据-指定字段查询
     *   根据微博ID查询微博的内容和发布时间
     */
    //@Select("SELECT content, created FROM blog.weibo WHERE id = #{id}")
    WeiboVO1 selectColumns(int id);

    /**
     * 7.练习：根据用户ID查询该用户发表的微博信息[微博id、微博内容、发布时间]
     *   接口方法：selectByUid(...)
     *   1.VO类;
     *   2.接口方法;
     *   3.测试;
     */
    //@Select("SELECT id, content, created FROM blog.weibo WHERE user_id = #{userId}")
    List<WeiboVO2> selectByUid(int userId);

    /**
     * 8.ResultMap单表:根据微博id查询该条微博的信息
     */
    ResultMapVO1 selectByWid(int wid);

    /**
     * 9.ResultMap多表:查询指定用户发的微博信息
     */
    ResultMapVO2 selectMap2(int uid);

    /**
     *
     */
    ResultMapVO3 selectMap3(int wid);

    /**
     *
     */
    ResultMapVO4 selectMap4(int wid);

}
